// api/galleryApi.js

/**
 * 调用云函数的通用方法
 * @param {string} name - 云函数名称
 * @param {string} action - 操作类型
 * @param {object} params - 请求参数
 */
const callCloudFunction = (name, action, params = {}) => {
  return new Promise((resolve, reject) => {
    wx.cloud.callFunction({
      name: name,
      data: {
        action: action,
        params: params
      },
      success: res => {
        if (res.result && res.result.success) {
          resolve(res.result);
        } else {
          reject(res.result || { message: '操作失败' });
        }
      },
      fail: err => {
        console.error(`调用云函数[${name}.${action}]失败:`, err);
        reject(err);
      }
    });
  });
};

/**
 * 直接调用云函数，不使用action参数
 */
const callFunction = (name, data = {}) => {
  return new Promise((resolve, reject) => {
    wx.cloud.callFunction({
      name: name,
      data: data,
      success: res => {
        if (res.result && res.result.success !== false) {
          resolve(res.result);
        } else {
          reject(res.result || { message: '操作失败' });
        }
      },
      fail: err => {
        console.error(`调用云函数[${name}]失败:`, err);
        reject(err);
      }
    });
  });
};

// 图片库相关API
const galleryApi = {
  /**
   * 获取图库列表
   * @param {object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.limit - 每页数量
   * @param {string} params.sortBy - 排序字段
   * @param {string} params.filterType - 筛选类型
   * @returns {Promise}
   */
  getGalleryList: (params = {}) => {
    return callCloudFunction('gallery', 'getGalleryList', params);
  },
  
  /**
   * 获取图片详情
   * @param {string} imageId - 图片ID
   * @returns {Promise}
   */
  getImageDetail: (imageId) => {
    return callCloudFunction('gallery', 'getImageDetail', { imageId });
  },
  
  /**
   * 获取用户发布的图片
   * @param {string} userId - 用户ID，不传则获取当前用户
   * @param {number} page - 页码
   * @param {number} limit - 每页数量
   * @returns {Promise}
   */
  getUserImages: (userId = '', page = 1, limit = 10) => {
    return callCloudFunction('gallery', 'getUserImages', { 
      userId,
      page,
      limit
    });
  },
  
  /**
   * 点赞图片
   * @param {string} imageId - 图片ID
   * @returns {Promise}
   */
  likeImage: (imageId) => {
    return callCloudFunction('gallery', 'likeImage', { imageId });
  },
  
  /**
   * 取消点赞
   * @param {string} imageId - 图片ID
   * @returns {Promise}
   */
  unlikeImage: (imageId) => {
    return callCloudFunction('gallery', 'unlikeImage', { imageId });
  },
  
  /**
   * 发布评论
   * @param {string} imageId - 图片ID
   * @param {string} content - 评论内容
   * @param {string} parentId - 父评论ID（回复时使用）
   * @returns {Promise}
   */
  addComment: (imageId, content, parentId = '') => {
    return callCloudFunction('gallery', 'addComment', { 
      imageId,
      content,
      parentId
    });
  },
  
  /**
   * 获取图片评论
   * @param {string} imageId - 图片ID
   * @param {number} page - 页码
   * @param {number} limit - 每页数量
   * @returns {Promise}
   */
  getComments: (imageId, page = 1, limit = 20) => {
    return callCloudFunction('gallery', 'getComments', { 
      imageId,
      page,
      limit
    });
  },
  
  /**
   * 收藏/取消收藏图片
   * @param {string} imageId - 图片ID
   * @param {boolean} isFavorite - 是否收藏
   * @returns {Promise}
   */
  favoriteImage: (imageId, isFavorite) => {
    return callCloudFunction('gallery', 'favoriteImage', { 
      imageId,
      isFavorite
    });
  },
  
  /**
   * 发布图片到社区
   * @param {object} imageData - 图片数据
   * @param {string} imageData.imageUrl - 图片链接或云文件ID
   * @param {string} imageData.prompt - 提示词
   * @param {string} imageData.negativePrompt - 反向提示词
   * @param {string} imageData.style - 图片风格
   * @param {string} imageData.size - 图片尺寸
   * @param {string} imageData.title - 标题（可选）
   * @param {string} imageData.description - 描述（可选）
   * @param {array} imageData.tags - 标签（可选）
   * @returns {Promise}
   */
  publishImage: (imageData) => {
    return callFunction('saveImage', imageData);
  }
};

module.exports = galleryApi; 